package io.github.hadyang.leetcode.bytedance;

/**
 * 给定一个字符串，逐个翻转字符串中的每个单词。
 *
 * <p>
 *
 * <p>
 *
 * <p>示例 1：
 *
 * <p>输入: "the sky is blue" 输出: "blue is sky the" 示例 2：
 *
 * <p>输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。 示例 3：
 *
 * <p>输入: "a good example" 输出: "example good a" 解释: 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
 *
 * <p>
 *
 * <p>说明：
 *
 * <p>无空格字符构成一个单词。 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
 *
 * <p>
 *
 * <p>进阶：
 *
 * <p>请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。
 */
public class String1011 {
  public String reverseWords(String s) {
    String trimed = s.trim();

    String[] split = trimed.split(" ");

    StringBuilder builder = new StringBuilder();
    for (int i = split.length - 1; i >= 0; i--) {
      String t = split[i];
      if (t.trim().isEmpty()) {
        continue;
      }

      builder.append(t).append(" ");
    }

    return builder.toString().trim();
  }

  public static void main(String[] args) {
    String1011 main = new String1011();
    System.out.println(main.reverseWords("the sky is blue"));
    System.out.println(main.reverseWords("  hello world!  "));
    System.out.println(main.reverseWords(" a good   example"));
  }
}
